import request from '@/utils/request';
import qs from 'qs';
import { ResponseData } from '../typing';
// 参数接口
export interface UpdateProcessParams {
    // 流程名称 */
    name: string;
    // 管理后台 - 流程定义审批节点 */
    nodes: {
        // 角色ID */
        id: Record<string, unknown>;
        // 角色名称 */
        name: string;
    }[];
    // 所属事项，0：强制关单、1：作废、2：投诉 */
    type: number;
    // 状态,0：停用、1：启用 */
    state: number;
    // 主键 */
    id: number;
}

/**
 * 更新流程定义
 * @param {object} params 管理后台 - 流程定义更新 Request VO
 * @param {string} params.name 流程名称
 * @param {array} params.nodes 管理后台 - 流程定义审批节点
 * @param {number} params.type 所属事项，0：强制关单、1：作废、2：投诉
 * @param {number} params.state 状态,0：停用、1：启用
 * @param {number} params.id 主键
 * @returns
 */
export function updateProcess(params: UpdateProcessParams): Promise<ResponseData<boolean>> {
    return request.put(`/yfwy/process/update`, params);
}
// 参数接口
export interface GetProcessPageParams {
    // 当前第几页(默认1) */
    current?: number;
    // 每页条数(默认20) */
    size?: number;
    // 流程名称 */
    name?: string;
    page?: {
        records?: {
            createTime?: string;
            updateTime?: string;
            creator?: Record<string, unknown>;
            updater?: Record<string, unknown>;
            // 主键 */
            id?: Record<string, unknown>;
            // 流程名称 */
            name?: string;
            // 审批角色（节点），json字符串 */
            nodes?: string;
            // 所属事项，0：强制关单、1：作废、2：投诉 */
            type?: Record<string, unknown>;
            // 状态,0：停用、1：启用 */
            state?: Record<string, unknown>;
            // 版本，从1开始 */
            version?: Record<string, unknown>;
        }[];
        total?: Record<string, unknown>;
        size?: Record<string, unknown>;
        current?: Record<string, unknown>;
        orders?: {
            column?: string;
            asc?: boolean;
        }[];
        optimizeCountSql?: boolean;
        searchCount?: boolean;
        optimizeJoinOfCountSql?: boolean;
        maxLimit?: Record<string, unknown>;
        countId?: string;
        pages?: Record<string, unknown>;
    };
}
// 响应接口
export interface GetProcessPageRes {
    code: number;
    data: {
        size: number;
        total: number;
        records: {
            // 主键 */
            id: number;
            // 流程名称 */
            name: string;
            // 审批角色，转换后逗号分隔的文字 */
            nodes: string;
            // 所属事项，0：强制关单、1：作废、2：投诉 */
            type: number;
            // 状态,0：停用、1：启用 */
            state: number;
            // 版本，从1开始 */
            version: number;
        }[];
        current: number;
        pages: number;
    };
    msg: string;
}
/**
 * 获得流程定义分页
 * @param {object} params 管理后台 - 流程定义分页 Request VO
 * @param {number} params.current 当前第几页(默认1)
 * @param {number} params.size 每页条数(默认20)
 * @param {string} params.name 流程名称
 * @param {object} params.page
 * @returns
 */
export function getProcessPage(params: GetProcessPageParams): Promise<GetProcessPageRes> {
    return request.post(`/yfwy/process/page`, params);
}
// 参数接口
export interface ExportProcessExcelParams {
    // 当前第几页(默认1) */
    current?: number;
    // 每页条数(默认20) */
    size?: number;
    // 流程名称 */
    name?: string;
    page?: {
        records?: {
            createTime?: string;
            updateTime?: string;
            creator?: Record<string, unknown>;
            updater?: Record<string, unknown>;
            // 主键 */
            id?: Record<string, unknown>;
            // 流程名称 */
            name?: string;
            // 审批角色（节点），json字符串 */
            nodes?: string;
            // 所属事项，0：强制关单、1：作废、2：投诉 */
            type?: Record<string, unknown>;
            // 状态,0：停用、1：启用 */
            state?: Record<string, unknown>;
            // 版本，从1开始 */
            version?: Record<string, unknown>;
        }[];
        total?: Record<string, unknown>;
        size?: Record<string, unknown>;
        current?: Record<string, unknown>;
        orders?: {
            column?: string;
            asc?: boolean;
        }[];
        optimizeCountSql?: boolean;
        searchCount?: boolean;
        optimizeJoinOfCountSql?: boolean;
        maxLimit?: Record<string, unknown>;
        countId?: string;
        pages?: Record<string, unknown>;
    };
}

/**
 * 导出流程定义 Excel
 * @param {object} params 管理后台 - 流程定义分页 Request VO
 * @param {number} params.current 当前第几页(默认1)
 * @param {number} params.size 每页条数(默认20)
 * @param {string} params.name 流程名称
 * @param {object} params.page
 * @returns
 */
export function exportProcessExcel(params: ExportProcessExcelParams): Promise<Blob> {
    return request.post(`/yfwy/process/export-excel`, params, {
        responseType: 'blob',
    });
}
// 参数接口
export interface CreateProcessParams {
    // 流程名称 */
    name: string;
    // 管理后台 - 流程定义审批节点 */
    nodes: {
        // 角色ID */
        id: Record<string, unknown>;
        // 角色名称 */
        name: string;
    }[];
    // 所属事项，0：强制关单、1：作废、2：投诉 */
    type: number;
    // 状态,0：停用、1：启用 */
    state: number;
}

/**
 * 创建流程定义
 * @param {object} params 管理后台 - 流程定义创建 Request VO
 * @param {string} params.name 流程名称
 * @param {array} params.nodes 管理后台 - 流程定义审批节点
 * @param {number} params.type 所属事项，0：强制关单、1：作废、2：投诉
 * @param {number} params.state 状态,0：停用、1：启用
 * @returns
 */
export function createProcess(params: CreateProcessParams): Promise<ResponseData<number>> {
    return request.post(`/yfwy/process/create`, params);
}
// 响应接口
export interface GetProcessRes {
    code: number;
    data: {
        createTime: Record<string, unknown>;
        updateTime: Record<string, unknown>;
        creator: number;
        updater: number;
        // 主键 */
        id: number;
        // 流程名称 */
        name: string;
        // 审批角色（节点），json字符串 */
        nodes: string;
        // 所属事项，0：强制关单、1：作废、2：投诉 */
        type: number;
        // 状态,0：停用、1：启用 */
        state: number;
        // 版本，从1开始 */
        version: number;
    };
    msg: string;
}
/**
 * 获得流程定义
 * @param {string} id
 * @returns
 */
export function getProcess(id: number): Promise<GetProcessRes> {
    return request.get(`/yfwy/process/get/${id}`);
}
/**
 * 删除流程定义
 * @param {string} id
 * @returns
 */
export function deleteProcess(id: number): Promise<ResponseData<boolean>> {
    return request.delete(`/yfwy/process/delete/${id}`);
}
